Using the gnu autotools with compiled code
This builds on Generating the smallest possible, self-contained executable and adds support for using the GNU Autotools (autoconf, automake, etc.).
Again, we start with our simple hello.scm:
$ cat hello.scm (display "Hello, world!\n") $ chicken hello.scm -explicit-use -uses library
Now we copy library.c, runtime.c, chicken.h and chicken-defaults.h from the CHICKEN source distribution into the current directory. (If your source directory doesn't have chicken-defaults.h, the make chicken-defaults.h command will build it for you.)
Next we need a Makefile.am and configure.in:
$ cat Makefile.am bin_PROGRAMS = hello hello_SOURCES = hello.c runtime.c library.c hello_LDADD = -lm
$ cat configure.in AC_INIT(hello, 1.0.0) AM_INIT_AUTOMAKE() AC_CONFIG_SRCDIR([chicken.h]) AC_CONFIG_HEADER([chicken-config.h]) # Checks for programs. AC_PROG_CC # Checks for header files. AC_FUNC_ALLOCA AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_CHECK_HEADERS([alloca.a stdint.h limits.h malloc.h stdint.h stdlib.h string.h sys/time.h]) # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_TYPE_SIZE_T AC_HEADER_TIME AC_STRUCT_TM AC_C_VOLATILE # Checks for library functions. AC_FUNC_MALLOC AC_FUNC_REALLOC AC_TYPE_SIGNAL AC_FUNC_STAT AC_CHECK_FUNCS([floor memset modf pow strerror strncasecmp strpbrk]) AC_CONFIG_FILES([Makefile]) AC_OUTPUT
(This is mostly generated by autoscan)
You should now have the following files:
Makefile.am chicken.h chicken-defaults.h configure.in hello.c library.c runtime.c
Running a few autotools in the appropriate order, we generate the rest of the required infrastructure:
$ aclocal $ autoheader $ automake --foreign -a --copy configure.in: installing `./install-sh' configure.in: installing `./mkinstalldirs' configure.in: installing `./missing' Makefile.am: installing `./depcomp' $ autoconf
Now you could put all files in the directory into a tarball and install it on most UNIX machines (For more exotic platforms, some tweaking of configure.in might be needed, though).
Build and installation can now be performed in the usual manner:
$ ./configure $ make $ make install